package cn.iocoder.yudao.module.enterprise.service.enterpriseJob;

import cn.iocoder.yudao.framework.common.pojo.PageResult;
import cn.iocoder.yudao.module.enterprise.controller.admin.enterpriseJob.vo.*;
import cn.iocoder.yudao.module.enterprise.dal.dataobject.enterpriseJob.EnterpriseJobDO;

import javax.validation.Valid;
import java.util.Collection;
import java.util.List;

/**
 * 招聘职位 Service 接口
 *
 * @author 谭万全
 */
public interface EnterpriseJobService {
    /**
     * 创建招聘职位
     *
     * @param createReqVO 创建信息
     * @return 编号
     */
    Long createJob(@Valid EnterpriseJobCreateReqVO createReqVO);

    /**
     * 更新招聘职位
     *
     * @param updateReqVO 更新信息
     */
    void updateJob(@Valid EnterpriseJobUpdateReqVO updateReqVO);

    void updateEnterpriseJobFixed(  Long id,  Integer timingStatus, String fixedTime );

    /**
     * 更新招聘职位
     *
     * @param updateReqVOs 更新信息
     */
    void updateJobsDate(@Valid List<EnterpriseJobUpdateReqVO> updateReqVOs);

    /**
     * 招聘职位批量置顶
     *
     * @param ids 更新信息
     */
    void setJobsTopStatus(@Valid List<Long> ids,String status);

    /**
     * 招聘职位批量发布
     *
     * @param ids 更新信息
     */
    void setJobStatus(@Valid List<Long> ids);

    /**
     * 招聘职位批量发布
     *
     * @param ids 更新信息
     */
    void setJobStatus(@Valid List<Long> ids,String status);


    /**
     * 招聘职位批量删除
     *
     * @param ids 更新信息
     */
    void deleteJob(@Valid List<Long> ids);


    /**
     * 审核招聘职位
     *
     * @param updateReqVO 更新信息
     */
    void examinJob(EnterpriseJobUpdateReqVO updateReqVO);

    /**
     * 删除招聘职位
     *
     * @param id 编号
     */
    void deleteJob(Long id);

    /**
     * 获得招聘职位
     *
     * @param id 编号
     * @return 招聘职位
     */
    EnterpriseJobDO getJob(Long id);

    EnterpriseJobDO getRecoveryMemberJobById(Long id);

    /**
     * 获得招聘职位列表
     *
     * @param ids 编号
     * @return 招聘职位列表
     */
    List<EnterpriseJobDO> getJobList(Collection<Long> ids);
    void updateBatchRecoveryEnterpriseJob(List<Long> ids);

    /**
     * 获得招聘职位分页
     *
     * @param pageReqVO 分页查询
     * @return 招聘职位分页
     */
    PageResult<EnterpriseJobDO> getJobPage(EnterpriseJobPageReqVO pageReqVO);

    /**
     * 获得招聘职位列表, 用于 Excel 导出
     *
     * @param exportReqVO 查询条件
     * @return 招聘职位列表
     */
    List<EnterpriseJobDO> getJobList(EnterpriseJobExportReqVO exportReqVO);


    /**
     * 获得未发布招聘职位分页
     *
     * @param pageReqVO 分页查询
     * @return 招聘职位分页
     */
    PageResult<EnterpriseJobDO> getJobWaitExaminePage(EnterpriseJobPageReqVO pageReqVO,List<String> flag);
    PageResult<EnterpriseJobDO> recoveryEnterpriseJobPage(EnterpriseJobPageReqVO pageReqVO );

    /**
     * 导入职位
     * @param list
     * @param updateSupport
     * @return
     */
    JobImportRespVO importJob(List<EnterpriseJobImputReqVO> list, Boolean updateSupport);

    EnterpriseJobCensusRespVO getEnterpriseJobCensus(Integer type,String startDate,String endDate,Long jobId);
}
